package com.sgc.view;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import org.primefaces.context.RequestContext;

import com.architecture.view.MensagemEnum;
import com.architecture.view.PadraoManutencaoMB;
import com.architecture.view.UtilWeb;
import com.archtecture.control.exceptions.NegocioException;
import com.sgv.model.entities.ItemVendaModel;
import com.sgv.model.entities.ProdutoModel;
import com.sgv.model.entities.VendaModel;
import com.sgv.model.persistence.SGVCaixaFacadeLocal;

@ManagedBean
@ViewScoped
public class VendaMB extends PadraoManutencaoMB<VendaModel> {

	@EJB
	private SGVCaixaFacadeLocal caixaFacadeLocal;

	private ItemVendaModel itemVenda;

	public ItemVendaModel getItemVenda() {
		if (itemVenda == null) {
			itemVenda = new ItemVendaModel();
			itemVenda.setProduto(new ProdutoModel());
		}
		return itemVenda;
	}

	public void setItemVenda(ItemVendaModel itemVenda) {
		this.itemVenda = itemVenda;
	}

	@Override
	protected VendaModel getInstance() {
		VendaModel lVenda = new VendaModel();
		lVenda.setListItemVenda(new ArrayList<ItemVendaModel>());
		return lVenda;
	}

	@PostConstruct
	public void iniciarComponentes() {
		try {
			setModelCad(caixaFacadeLocal.obterVendaAbertaPorUsuario());
		}
		catch (NegocioException e) {
			UtilWeb.tratarException(e);
		}
	}

	public void incluirItemVenda() {

		try {

			ProdutoModel lProduto = getPersistenceFacade().carregar(getItemVenda().getProduto());
			if (lProduto == null) {
				UtilWeb.enviarMensagem(MensagemEnum.ERRO_VENDA_PRODUTO_NAO_ENCONTRADO);
			}

			else {
				caixaFacadeLocal.salvarItemVenda(getModelCad(), getItemVenda());
				getModelCad().getListItemVenda().add(getItemVenda());
			}

			setItemVenda(null);

		}
		catch (NegocioException e) {
			UtilWeb.tratarException(e);
		}
	}

	public List<ProdutoModel> autocompletarProdutos(String query) {
		List<ProdutoModel> lListProdutos = caixaFacadeLocal.obterProdutos(query);

		if (lListProdutos.isEmpty()) {
			UtilWeb.enviarMensagem(MensagemEnum.INFO_PRODUTO_NAO_ENCONTRADO);
		}

		return lListProdutos;
	}

	public void executarExcluirItemVenda(ItemVendaModel pItem) {
		caixaFacadeLocal.excluirItemVenda(pItem);
		getModelCad().getListItemVenda().remove(pItem);
		UtilWeb.enviarMensagem(MensagemEnum.INFO_SUCESSO_EXCLUSAO);
	}

	public void executarConcluirVenda() {
		caixaFacadeLocal.concluirVenda(getModelCad());
		setModelCad(null);
		UtilWeb.enviarMensagem(MensagemEnum.INFO_SUCESSO_CADASTRO);
		RequestContext.getCurrentInstance().execute("PF('dialogCadastro').hide()");
	}

	public void executarCancelarVenda() {
		caixaFacadeLocal.cancelarVenda(getModelCad());
		setModelCad(null);
		UtilWeb.enviarMensagem(MensagemEnum.INFO_SUCESSO_CANCELAMENTO_VENDA);
	}
}
